package cn.liuyijiao;
// 在类开头添加数据库配置和依赖
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import com.google.gson.reflect.TypeToken;
import org.jsoup.Jsoup;
import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;

public class PaquData {
    //爬取数据hanzi-writer-data 网站的汉字数据https://cdn.jsdelivr.net/npm/hanzi-writer-data@2.0/
    //数据结构{"strokes": ["M 475 485 Q 547 653 563 683 Q 573 695 565 708 Q 558 721 519 742 Q 491 757 480 754 Q 462 750 465 730 Q 484 537 292 308 Q 280 296 269 284 Q 212 217 68 102 Q 58 92 66 89 Q 76 86 90 92 Q 190 138 274 210 Q 380 294 462 456 L 475 485 Z", "M 462 456 Q 480 423 575 292 Q 666 171 733 101 Q 764 67 793 69 Q 881 75 958 79 Q 991 80 992 89 Q 993 98 956 112 Q 772 178 740 205 Q 617 304 490 466 Q 481 476 475 485 C 457 509 447 482 462 456 Z"], "medians": [[[483, 736], [508, 702], [511, 678], [473, 552], [408, 416], [328, 303], [271, 244], [144, 139], [72, 95]], [[474, 477], [477, 459], [490, 439], [571, 333], [691, 200], [753, 145], [798, 119], [986, 90]]]}
    //mysql 数据库字段： id ,hanzi,strokes,medians
    //mysql 数据库表：hanzi_data
    //mysql 建表语句：
//     CREATE TABLE `hanzi_data` (
//       `id` int(11) NOT NULL AUTO_INCREMENT,
//       `hanzi` varchar(255) DEFAULT NULL,
//       `strokes` varchar(1024) DEFAULT NULL,
//       `medians` varchar(1024) DEFAULT NULL,
//       PRIMARY KEY (`id`)
//     ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
    //使用jsoup爬取数据
    //实现一个方法，传入一个汉字，写入数据库

    // 添加数据库配置（请根据实际情况修改）
    private static final String DB_URL = "jdbc:mysql://localhost:3306/your_db?useSSL=false&characterEncoding=utf8";
    private static final String USER = "root";
    private static final String PASS = "password";

    // 添加JSON解析工具
    private static final Gson gson = new Gson();

    // 新增数据实体类
    private static class HanziData {
        String[] strokes;
        List<List<List<Integer>>> medians;
    }

    // ... 保持原有注释不变 ...
    //新增查询接口
    public static String queryHanziData(String hanzi) {
        String result="";
        //查询数据库是否有该字
        try {
            List<Entity>  listEntity=Db.use("mysqlLocal").query("SELECT * FROM hanzi_data WHERE hanzi = ?", hanzi);
            if (listEntity.size() > 0) {
                System.out.println("数据库已存在该字：" + hanzi);
                result= gson.toJson(listEntity.get(0));
            }else{
                //没有的写入数据库
                result=crawlAndSaveHanzi(hanzi);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    // 新增爬取方法
    public static String crawlAndSaveHanzi(String hanzi) {
        String json ="";
        String url = "https://cdn.jsdelivr.net/npm/hanzi-writer-data@2.0/" + hanzi + ".json";
        try {
            // 1. 获取数据（保持不变）
            json = Jsoup.connect(url)
                    .ignoreContentType(true)
                    .timeout(10000)
                    .execute()
                    .body();

            // 2. 解析JSON（保持不变）
            HanziData data = gson.fromJson(json, HanziData.class);

            // 3. 使用Db工具类插入数据
            Db.use("mysqlLocal").insert(Entity.create("hanzi_data")
                    .set("hanzi", hanzi)  // 使用双引号
                    .set("strokes", gson.toJson(data.strokes))
                    .set("medians", gson.toJson(data.medians))
            );

        } catch (Exception e) {
            e.printStackTrace();
        }
        return json;
    }

    public static void main(String[] args) {
        //汉字数据库，汉字大全，JSON格式汉字数据，收录16159个汉字
        // 文件路径（相对于 resources 根目录）
        String filePath = "common_hanzi.json";
        String json="";
        // 使用 ClassLoader 读取
        try (InputStream inputStream = PaquData.class.getClassLoader().getResourceAsStream(filePath);
             BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {
              json = reader.lines().collect(Collectors.joining("\n"));
              System.out.println(json); // 输出文件内容
        } catch (IOException e) {
            e.printStackTrace();
        }
        Gson gson = new Gson();
        Type listType = new TypeToken<ArrayList<String>>(){}.getType();
        ArrayList<String> hanziList = gson.fromJson(json.toString(), listType);
        // 生成100个常用汉字（示例）
        int size=hanziList.size();
        for (int i = 0;i < 10; i++) {
            String hanzi =hanziList.get(i);
            hanziList.add(hanzi);
        }
        // 遍历爬取并存储
        hanziList.forEach(PaquData::crawlAndSaveHanzi);
        System.out.println("数据爬取完成！");
    }
    public static void main1(String[] args)throws Exception {
        String hanzi="一";
        //查询数据库
        List<Entity>  listEntity=Db.use("mysqlLocal").query("SELECT * FROM hanzi_data WHERE hanzi = ? ", hanzi);
        System.out.println("数据库已存在该字：" + hanzi);
        String result= gson.toJson(listEntity.get(0));
        System.out.println(result);
    }

}
